package com.plian.system.service.sys.orgzation;

import com.baomidou.mybatisplus.extension.service.IService;
import com.plian.system.entity.sys.Org;
import com.plian.system.model.ListResult;
import com.plian.system.vo.sys.OrgVO;

import java.util.List;
import java.util.Map;

/**
 * @description:
 * @author: gangan
 * @create: 2022-01-10 15:53
 */
public interface IOrgService  extends IService<Org> {


    /**
     * 获取所有下级单位 包含本级
     * @param id
     * @return
     */
    List<Org> getAllChild(String id);

    /**
     * 获取所有下级单位id 包含本级
     * @param id
     * @return
     */
    List<String> getAllChildIds(String id);

    /**
     * 是否为国资委
     * @param id
     * @return
     */
    Boolean checkIsGzw(String id);

    /**
     * 是否为国资委
     * @param org
     * @return
     */
    Boolean checkIsGzw(Org org);

    /**
     * 获取下级单位
     * @param id
     * @return
     */
    List<Org> getChildOrg(String id);

    /**
     * 获取下级单位
     * @param ids
     * @return
     */
    List<Org> getChildOrg(List<String> ids);


    /**
     *
     * @param parentOrgList 父节点
     * @param allOrg 所有组织
     * @return Map<父节点id, 所有子节点id>
     */
    Map<String, List<String>> getChildOrg(List<Org> parentOrgList, List<Org> allOrg);

    /**
     * 获取所有集团
     * @return
     */
    List<Org> getGzwUnits();

    /**
     * 是否过滤 东投
     * @param flag
     * @return
     */
    List<Org> getGzwUnits(boolean flag);

    /**
     * 根据年月 获取是否要过滤东投标签
     * @param countDate
     * @return
     */
    boolean getDTFlag(String countDate);

    /**
     * 是否东投
     * @param orgId
     * @return
     */
    boolean isDT(String orgId);


    /**
     * 获取所有单位
     * @return
     */
    List<Org> getAllOrg();

    /**
     * 获取 isMonitor =1 直属集团
     * @return
     */
    List<Org> directlyUnderUnit();

    /**
     * 获取 isMonitor =1 直属集团 下级
     * @return
     */
    List<Org> directlyUnderChildUnit();

    /**
     * 获取 isMonitor =1 直属集团,只保留合并节点 - 13家
     * @return
     */
    ListResult<Org> directlyUnderUnitNoChild(Boolean result);

//    /*** TODO DEL
//     * @Author: Take-off
//     * @Description: //TODO 获取13家包括国资委
//     * @Date: 9:24 PM 2023/1/31
//     * @Param: []
//     * @return: com.plian.system.model.ListResult<com.plian.system.entity.sys.Org>
//     **/
//    ListResult<Org> findThirteenOrgAddGZW();

    /**
     * @param 
     * @return com.plian.system.model.ListResult<com.plian.system.entity.sys.Org>
     **/
    ListResult<Org> findThirteenOrgOfBackend();

    /**
     * 主要指标 单位列表（13家集团 原水单独 二级集团） 根据登录信息过滤（临时处理 后续用业务组织代替）
     * @return
     */
    List<Org> findMainIndicatorsOrg();

    /**
     * 获取国资委节点需要合并的节点
     */
    List<Org> findMainIndicatorsSummaryOrg();

    /**
     * 主要指标 单位列表（13家集团 原水单独 二级集团） 根据登录信息过滤（临时处理 后续用业务组织代替）
     * @return
     */
    List<OrgVO> findMainIndicatorsOrgTree();

    /**
     * 根据数据源id获取组织
     * @param dataSource
     * @param dataSourceId
     * @return
     */
    Org getByDataSourceId(String dataSource, String dataSourceId);

    /**
     * 根据数据源ids获取组织
     * @param dataSource
     * @param dataSourceIds
     * @return
     */
    List<Org> getByDataSourceIds(String dataSource, List<String> dataSourceIds);

    /**
     * 一体化 组织批量新增或修改
     * @param data
     * @return
     */
    String ythOrgSubmitList(String data);

    /**
     * 获取所有一体化传输的组织
     * @return
     */
    List<Org> getYthOrgList();

    /**
     * 一体化 组织批量删除
     * @param data
     * @return
     */
    String ythOrgRemove(String data);

    /**
     * 一体化 组织详情
     * @param data
     * @return
     */
    String ythOrgDetails(String data);

    /**
     * 是否有下级单位
     * @param orgId
     * @return
     */
    boolean haveChild(String orgId);

    /**
     * 获取融资 企业列表 十三家
     * @return
     */
    List<Org> getFinancingOrgList();

    /**
     * 获取简称
     * @return
     */
    List<OrgVO> findCheckName(List<Org> orgList);

    Map<String, String> getSourceId();

    Org getSuperiorUnit(String id);

    /**
     * 获取监管企业包含虚拟节点
     */
    List<Org> getAllRegulatoryOrg();

    /**
     * 获取summaryCode （预算表的summaryCode）
     * @return
     */
    int getSummaryCode(Org org);

    /**
     * 检查orgCode 并修改
     */
    void checkAndChangeOrgCode();

    /**
     * 获取所有行政单位
     * @return
     */
    List<Org> getAllCompetentOrganization();


}
